﻿#include <stdio.h>

//main29：数组初始化的内存结构
int main29(void)
{
	//1.像变量赋值一样，为数组的元素一次赋值；
	//int scores[10] = { 99,89,78,67,56,34,99,21,80,80 };

	//4.赋值时，括号中一次为数组前面的元素赋值，如果数组长度超过元素的个数，后面的值全部初始化为0；
	//int scores[10] = { 99,89,78 };//3个元素，长度为10；

	int scores[] = { 99,89,78 };//3个元素，长度为3；
	printf("3.输出数组scores的长度：%d\n", sizeof(scores) / sizeof(scores[0]));//3.输出数组scores的长度：3

	//for (int i = 0; i < 10; i++)
	for (int i = 0; i < sizeof(scores) / sizeof(scores[0]); i++)
	{
		printf("2.输出数组scores的值：%d\n", scores[i]);//2.输出数组scores的值：99 89 78
	}

	//8.栈区：数据暂时存储的地方，每次程序运行，地址都会变化；启动时加载到内存中，结束就释放；
	//5.数组的内存结构；
	int grades[10] = { 99,89,78,67,56,34,99,21,80,80 };

	//9.%p，打印变量的内存地址，是以无符号十六进制格式打印，打印时需要在变量前加上【&】；%X也有同样的效果；
	printf("6.输出数组grades第一元素的内存地址值：%p\n", &grades[0]);//6.输出数组grades第一元素的内存地址值：00CFF8FC
	//0x00C3FC4C---->63 00 00 00---->00 00 00 63---->0000 0000 0000 0000 0000 0000 0110 0011

	printf("7.输出数组grades第一元素的内存地址值：%X\n", &grades[1]);//7.输出数组grades第一元素的内存地址值：CFF900
	//10.grades[0]和grades[1]的内存地址值，相差4个字节，就是数组类型int的内存4个字节大小；

	//11.打印数组名；等于grades[0]的内存地址值；
	printf("12.输出数组名grades对应的内存地址值：%p\n", grades);//12.输出数组名grades对应的内存地址值：00CFF8FC

	return 0;
}